/*
 * -------------------------------------------------------------
 *  FECHA      HORA     NOMBRE           COMENTARIO
 * -------------------------------------------------------------
 *  15/05/08   17:23    ALEX             Creación de interface.
 *  
 */

package net.ieslaferreria.infoCiutat;

/**
 *
 * @author Alex, Javi, David y Sergio
 */
public interface Cerca {
    
    /**
     * Busca quina es la ruta més adient entre els dos punts que li passem per
     * parametre depenent del parametres de cerca que li configurem.
     * 
     * @param puntOrigen
     * @param puntDesti
     * @return Ruta
     */
    /*
     * Començem pel nodeOrigen (Punt) i passarem totes les seves conexions
     * (Arestes) pel metode de l'aresta validarParametres per desestimar totes 
     * les branques que no entren dins els nostres criteris de cerca.
     * 
     * Un cop obtenim les branques validades per parametres les guardarem en una
     * cua prioritaria depenent del seu valor heurístic.
     * 
     * Agafarem la primera conexió de la cua i procedirem de la mateixa manera
     * Quan haguem explotat tot un cami fins al puntDesti el guardarem com
     * l'optim de moment i continuem amb el seguent cami.
     * 
     * Ara que tenim una referencia haurem de comparar si ens serveix explotar
     * un node o no. Si el valor del que portem explotat excedeix el nostre cami
     * optim provisional el desestimarem i seguirem amb el següent cami. Si el
     * valor del cami un cop hem arribat al puntDesti es menor al cami óptim
     * provisional el substituirem i a partir de llavors compararem amb aquest
     * camí
     * 
     * Un cop hem recorregut o desetimat totes les branques haurem obtingut el
     * nostre camí óptim. Només l'hem de retornar.     *  
     */
    public Ruta cercaRuta(ParametresCerca parametres);
    
    /**
     * Retorna els parametres actuals de cerca.
     * 
     * @return ParametresCerca
     */
    public ParametresCerca getParametres();
    
    /**
     * Inserta els nous parametres de cerca.
     * 
     * @param nousParametres
     */
    public void setParametres(ParametresCerca nousParametres);

}
